﻿#include "button.h"

Button::Button(QWidget *parent):QPushButton(parent)
{
    setMinimumSize(80, 25);
    m_normalColor = QColor("#ff5722"); // 默认颜色
    m_textColor = Qt::white; // 默认文本颜色为黑色
    m_currentColor = m_normalColor;
    m_hoverColor = m_normalColor.lighter(120);
    m_pressColor = m_normalColor.darker(120);
}

Button::Button(const QString &text, const QColor &color, QWidget *parent)
    : QPushButton(text, parent), m_normalColor(color), m_currentColor(color)
{
    // 设置按钮的最小尺寸
    setMinimumSize(80, 25);
    m_textColor = Qt::white; // 默认文本颜色为黑色
    // 计算 hover 和 press 状态的颜色
    m_hoverColor = m_normalColor.lighter(120); // 比正常颜色亮 20%
    m_pressColor = m_normalColor.darker(120);  // 比正常颜色暗 20%
}

void Button::setNormalColor(const QColor &color)
{
    m_normalColor = color;
    m_currentColor = m_normalColor;
    m_hoverColor = m_normalColor.lighter(120); // 计算 hover 颜色
    m_pressColor = m_normalColor.darker(120);  // 计算 press 颜色
    update(); // 触发重绘
}

void Button::setTextColor(const QColor &color)
{
    m_textColor = color;
    update(); // 触发重绘
}

void Button::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing);

    // 绘制按钮背景
    painter.setBrush(m_currentColor);
    painter.setPen(Qt::NoPen);
    painter.drawRoundedRect(rect(), 5, 5);

    // 绘制按钮文本
    painter.setPen(Qt::white); // 设置文本颜色为白色
    painter.setFont(font()); // 使用按钮的字体
    painter.drawText(rect(), Qt::AlignCenter, text()); // 居中绘制文本
}

void Button::enterEvent(QEvent *event)
{
    Q_UNUSED(event);
    m_currentColor = m_hoverColor; // 设置当前颜色为 hover 颜色
    update(); // 触发重绘
}

void Button::leaveEvent(QEvent *event)
{
    Q_UNUSED(event);
    m_currentColor = m_normalColor; // 设置当前颜色为正常颜色
    update(); // 触发重绘
}

void Button::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        m_currentColor = m_pressColor; // 设置当前颜色为 press 颜色
        update(); // 触发重绘
    }
    QPushButton::mousePressEvent(event); // 调用基类方法，确保按钮的点击事件正常触发
}

void Button::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        if (rect().contains(event->pos()))
        {
            m_currentColor = m_hoverColor; // 如果鼠标在按钮内，设置为 hover 颜色
        }
        else
        {
            m_currentColor = m_normalColor; // 如果鼠标在按钮外，设置为正常颜色
        }
        update(); // 触发重绘
    }
    QPushButton::mouseReleaseEvent(event); // 调用基类方法，确保按钮的点击事件正常触发
}
